#pragma once

#include "public/build.h"
#include "math/size.hpp"

#include <string>

namespace renderit {
	namespace client {

		class iwindow;
		class iconsole;

		class iclient
		{
		public:
			iclient()
			{
			}

		public:
			/*
			 * 创建一个窗口（第一个窗口默认为main_window）
			 * 仅在PC平台上有意义，iOS和Android等平台会自动创建一个全屏的窗口
			 *
			 */
			virtual iwindow * create_window(uint32 width, uint32 height, const std::string& title) { return nullptr; }
			virtual iwindow * get_main_window() { return nullptr; }

			/*
			 *  返回main_window的平台相关的Window Handle
			 *
			 */
			virtual void * window_handle() { return nullptr; }

			/*
			 * 创建一个Console
			 * 一个client最多有一个console
			 *
			 */
			virtual iconsole * create_console(const std::string& title) { return nullptr; }

			virtual iconsole * get_console() { return nullptr; }

			/*
			 * Loop 窗口相关
			 *
			 */
			virtual bool loop() { return true; }

			/*
			 * 返回系统时间戳，单位秒
			 *
			 */
			virtual double time() { return 0; }

			/*
			 * 返回游戏运行到目前时间，单位秒
			 *
			 */
			virtual double game_time() { return time() - game_start_time_; }

			/*
			 * 关闭游戏
			 *
			 */
			virtual void exit() {}
			virtual bool is_exit() { return false; }

		public:
			const dimension& screen_size() const { return size_; }
			const std::string& title() const { return title_; }


		protected:
			dimension size_;
			std::string title_;

			// Must Initialized When Client Start
			double game_start_time_;
		};

	}
}// namespace renderit